Вы можете использовать ActiveSheet из макросов, но это может дать вам нежелательные результаты, если активный лист не фактический лист, который содержит данные. Вот альтернатива. Почему бы не позволить пользователю выбрать диапазон Pivot? Вы можете использовать этот диапазон в своем коде?
Sub Sample()
Dim Rng As Range
On Error Resume Next
Set Rng = Application.InputBox(Prompt:="Please select the range for the pivot", Type:=8)
On Error GoTo 0
If Rng Is Nothing Then Exit Sub
MsgBox "The Pivot Range is " & Rng.Parent.Name & "!" & Rng.Address
End Sub
Followup
ОТКАЗ: Я всегда проверить свой код, прежде чем отправлять, но в отсутствие текстового файла в текущем сценарии, я не могу проверить код ниже. Также я не делал никаких ошибок, поэтому дайте мне знать, если вы получите какие-либо ошибки, и мы их оттуда возьмем.
Button1 Код не изменяется. Я немного изменил код второй кнопки и добавил 3-ей кнопку. Также обратите внимание, что я не я не использую жестко закодированные номера, как 1048576. Нет точки принимая все строки во внимание, если ваши данные говорят только до 2000 :)
TIP: При распространении приложения на пользователя, не забудьте включить ошибку обработки. Пользователи часто не ведут себя так, как вы ожидаете от них.Например, что, если пользователь нажимает на кнопку 2, прежде чем нажать на кнопку 1 или что, если пользователь нажимает на кнопку 3, прежде чем нажать на 1-й или 2-й кнопки :)
КОД
Option Explicit
Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
Dim lastRow As Long
Private Sub CommandButton1_Click()
'~~> Remains Unchanged
End Sub
'~~> Start button
Private Sub CommandButton2_Click()
Application.ScreenUpdating = False
Set wb1 = ThisWorkbook
Workbooks.OpenText Filename:=TextBox1.Value, Origin:=437, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
Set wb2 = ActiveWorkbook
Set ws2 = Sheets(1)
lastRow = ws2.Cells.Find(What:="*", After:=ws2.Range("A1"), _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End Sub
'~~> 3rd button Code
Private Sub CommandButton3_Click()
Set ws1 = wb1.Sheets.Add
wb1.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
ws2.Name & "!R1C1:R" & lastRow & "C12", Version:=xlPivotTableVersion12 _
).CreatePivotTable TableDestination:=ws1.Name & "!R3C1", TableName:= _
"PivotTable1", DefaultVersion:=xlPivotTableVersion12
End Sub
Followup
испытанный
Option Explicit
Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
Dim lastRow As Long, LastCol As Long
Dim strPath As String, FileName As String
Private Sub testFinder_Click()
'~~> Open button
Dim fileToOpen
fileToOpen = Application _
.GetOpenFilename("Text Files (*.txt), *.txt")
If fileToOpen = False Then Exit Sub
TextBox1.Value = fileToOpen
FileName = GetFilenameFromPath(TextBox1.Value)
strPath = Replace(TextBox1.Value, FileName, "")
End Sub
'~~> Start button
Private Sub CommandButton2_Click()
Set wb1 = ThisWorkbook
Workbooks.OpenText FileName:=strPath & FileName, Origin:=437, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
Set wb2 = ActiveWorkbook
Set ws2 = Sheets(1)
lastRow = ws2.Cells.Find(What:="*", After:=ws2.Range("A1"), _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastCol = ws2.Cells.Find(What:="*", After:=ws2.Range("A1"), _
Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, MatchCase:=False).Column
End Sub
'~~> 3rd button Code
Private Sub CommandButton3_Click()
Set ws1 = wb2.Sheets.Add
wb2.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
ws2.Name & "!R1C1:R" & lastRow & "C" & LastCol, _
Version:=xlPivotTableVersion12).CreatePivotTable TableDestination:= _
"[" & wb2.Name & "]" & ws1.Name & "!R3C1", _
TableName:="PivotTable1", DefaultVersion:= _
xlPivotTableVersion12
End Sub
Public Function GetFilenameFromPath(ByVal strPath As String) As String
If Right$(strPath, 1) <> "\" And Len(strPath) > 0 Then
GetFilenameFromPath = GetFilenameFromPath(Left$(strPath, _
Len(strPath) - 1)) + Right$(strPath, 1)
End If
End Function
НТН
Sid
Было бы хорошо, если PivotTable код работает на кнопку пуска? –
должно быть хорошо .. но будет ли совсем иначе, если я не хочу использовать его при стартовой кнопке? – user1204868
Да, немного, поскольку мне нужно соответствующим образом установить мои переменные. Вы могли бы запустить его с третьей кнопки? –