如何根据名称在 excel 上创建新选项卡,同时使用查询添加数据?
How to make new tab on excel depending on the name, whilst adding data with queries?
我想知道我将如何制作一个宏来读取特定 URL 变量的列表并进行数据查询和一个新的 sheet 用于不同的名称。
例如在我的 url 选项卡中我有这个:
1
Daniel Butler 2017 1
Daniel Butler 2018 1
Jack Riewoldt 2007 2
Jack Riewoldt 2008 2
Jack Riewoldt 2009 2
Jack Riewoldt 2010 2
Jack Riewoldt 2011 2
Jack Riewoldt 2012 2
Jack Riewoldt 2013 2
Jack Riewoldt 2014 2
Jack Riewoldt 2015 2
Jack Riewoldt 2016 2
Jack Riewoldt 2017 2
Jack Riewoldt 2018 2
我想要的是能够在 "dan butler" 和 "jack riewoldt" 的选项卡中显示他们每年的统计数据。例如,dan butler 选项卡将包含他 2017 年和 2018 年的统计数据。在我的 url 选项卡中,您可以在旁边看到数字 1 和 2。我期望的是宏会读取带有 1s 和 2s 的列,并且只会在该数字在循环时发生变化时创建一个新选项卡。
我用的url是这个URL我用的是这个:http://www.fanfooty.com.au/players/year.php?firstname=Dylan&surname=Grimes&year=2018
如您所见,唯一的变量是名字和姓氏以及年份。
我目前拥有的是:
Option Explicit
Public Sub GetAllUrls()
Dim wsURL As Worksheet
Set wsURL = ThisWorkbook.Worksheets("URL") 'here we define the urls worksheet
Dim i As Long
For i = 1 To 14 'we assume the data is in A1 to C14 (A=name, B=surname, C=year)
AddConnection wsURL.Cells(i, 1), wsURL.Cells(i, 2), wsURL.Cells(i, 3)
Next i
End Sub
Public Sub AddConnection(Name, Surname, Year)
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets.add(After:=ActiveSheet) 'add a new sheet
ws.Name = Left(Name & " " & Surname & " " & Year, 31) 'rename sheet (sheet names must be max 31 characters)
With ws.QueryTables.add(Connection:= _
"URL;http://www.fanfooty.com.au/players/year.php?firstname=" & Name & "&surname=" & Surname & "&year=" & Year _
, Destination:=Range("$A"))
.Name = Name & " " & Surname & " " & Year
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlAllTables
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub
请试一试,看看这是否是您想要实现的目标。
Dim ws As Worksheet
Dim destCell As Range
Public Sub GetAllUrls()
Dim wsURL As Worksheet
Dim i As Long
Dim x, dict
Dim shName As String
For Each ws In ThisWorkbook.Sheets
Application.DisplayAlerts = False
If Not LCase(ws.Name) Like "url*" Then ws.Delete
Next ws
Set wsURL = ThisWorkbook.Worksheets("URL") 'here we define the urls worksheet
x = wsURL.Range("A1:C14").Value
Set dict = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(x, 1) 'we assume the data is in A1 to C14 (A=name, B=surname, C=year)
shName = x(i, 1) & " " & x(i, 2)
If Not dict.exists(shName) Then
dict.Item(shName) = ""
Set ws = ThisWorkbook.Sheets.Add(after:=ActiveSheet)
ws.Name = shName
Set destCell = ws.Range("A1")
destCell.Interior.Color = vbYellow
Else
Set ws = ThisWorkbook.Sheets(shName)
Set destCell = ws.Cells(ws.UsedRange.Rows.Count + 2, 1)
destCell.Interior.Color = vbYellow
End If
AddConnection ws, x(i, 1), x(i, 2), x(i, 3)
ws.UsedRange.Columns.AutoFit
Next i
Set dict = Nothing
End Sub
Public Sub AddConnection(ByVal destSheet As Worksheet, Name, Surname, Year)
With ws.QueryTables.Add(Connection:= _
"URL;http://www.fanfooty.com.au/players/year.php?firstname=" & Name & "&surname=" & Surname & "&year=" & Year _
, Destination:=destCell)
.Name = Name & " " & Surname & " " & Year
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlAllTables
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
destCell.CurrentRegion.Borders.Color = vbBlack
End Sub
我想知道我将如何制作一个宏来读取特定 URL 变量的列表并进行数据查询和一个新的 sheet 用于不同的名称。
例如在我的 url 选项卡中我有这个:
1
Daniel Butler 2017 1
Daniel Butler 2018 1
Jack Riewoldt 2007 2
Jack Riewoldt 2008 2
Jack Riewoldt 2009 2
Jack Riewoldt 2010 2
Jack Riewoldt 2011 2
Jack Riewoldt 2012 2
Jack Riewoldt 2013 2
Jack Riewoldt 2014 2
Jack Riewoldt 2015 2
Jack Riewoldt 2016 2
Jack Riewoldt 2017 2
Jack Riewoldt 2018 2
我想要的是能够在 "dan butler" 和 "jack riewoldt" 的选项卡中显示他们每年的统计数据。例如,dan butler 选项卡将包含他 2017 年和 2018 年的统计数据。在我的 url 选项卡中,您可以在旁边看到数字 1 和 2。我期望的是宏会读取带有 1s 和 2s 的列,并且只会在该数字在循环时发生变化时创建一个新选项卡。
我用的url是这个URL我用的是这个:http://www.fanfooty.com.au/players/year.php?firstname=Dylan&surname=Grimes&year=2018
如您所见,唯一的变量是名字和姓氏以及年份。
我目前拥有的是:
Option Explicit
Public Sub GetAllUrls()
Dim wsURL As Worksheet
Set wsURL = ThisWorkbook.Worksheets("URL") 'here we define the urls worksheet
Dim i As Long
For i = 1 To 14 'we assume the data is in A1 to C14 (A=name, B=surname, C=year)
AddConnection wsURL.Cells(i, 1), wsURL.Cells(i, 2), wsURL.Cells(i, 3)
Next i
End Sub
Public Sub AddConnection(Name, Surname, Year)
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets.add(After:=ActiveSheet) 'add a new sheet
ws.Name = Left(Name & " " & Surname & " " & Year, 31) 'rename sheet (sheet names must be max 31 characters)
With ws.QueryTables.add(Connection:= _
"URL;http://www.fanfooty.com.au/players/year.php?firstname=" & Name & "&surname=" & Surname & "&year=" & Year _
, Destination:=Range("$A"))
.Name = Name & " " & Surname & " " & Year
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlAllTables
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub
请试一试,看看这是否是您想要实现的目标。
Dim ws As Worksheet
Dim destCell As Range
Public Sub GetAllUrls()
Dim wsURL As Worksheet
Dim i As Long
Dim x, dict
Dim shName As String
For Each ws In ThisWorkbook.Sheets
Application.DisplayAlerts = False
If Not LCase(ws.Name) Like "url*" Then ws.Delete
Next ws
Set wsURL = ThisWorkbook.Worksheets("URL") 'here we define the urls worksheet
x = wsURL.Range("A1:C14").Value
Set dict = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(x, 1) 'we assume the data is in A1 to C14 (A=name, B=surname, C=year)
shName = x(i, 1) & " " & x(i, 2)
If Not dict.exists(shName) Then
dict.Item(shName) = ""
Set ws = ThisWorkbook.Sheets.Add(after:=ActiveSheet)
ws.Name = shName
Set destCell = ws.Range("A1")
destCell.Interior.Color = vbYellow
Else
Set ws = ThisWorkbook.Sheets(shName)
Set destCell = ws.Cells(ws.UsedRange.Rows.Count + 2, 1)
destCell.Interior.Color = vbYellow
End If
AddConnection ws, x(i, 1), x(i, 2), x(i, 3)
ws.UsedRange.Columns.AutoFit
Next i
Set dict = Nothing
End Sub
Public Sub AddConnection(ByVal destSheet As Worksheet, Name, Surname, Year)
With ws.QueryTables.Add(Connection:= _
"URL;http://www.fanfooty.com.au/players/year.php?firstname=" & Name & "&surname=" & Surname & "&year=" & Year _
, Destination:=destCell)
.Name = Name & " " & Surname & " " & Year
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlAllTables
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
destCell.CurrentRegion.Borders.Color = vbBlack
End Sub