Excel VBA将粘贴复制到Sharepoint
需要打开一组锁定的工作簿,复制和过去的数据集,并重新锁定和关闭工作簿。一切正常,但数据不会粘贴到新的工作手册中,不知道发生了什么 我知道它正在复制数据,但不确定为什么它不会粘贴。我在本地文件和SharePoint上试用过,但都不起作用 代码如下:Excel VBA将粘贴复制到Sharepoint,excel,vba,sharepoint,Excel,Vba,Sharepoint,需要打开一组锁定的工作簿,复制和过去的数据集,并重新锁定和关闭工作簿。一切正常,但数据不会粘贴到新的工作手册中,不知道发生了什么 我知道它正在复制数据,但不确定为什么它不会粘贴。我在本地文件和SharePoint上试用过,但都不起作用 代码如下: Sub exportdata() 'Basic Parameters for entire code 'Timer to measure total macro run time Dim StartTime As Double D
Sub exportdata()
'Basic Parameters for entire code
'Timer to measure total macro run time
Dim StartTime As Double
Dim MinutesElapsed As String
StartTime = Timer
Dim Data_Export As Workbook
Set Data_Export = ThisWorkbook
Dim Data_Location As Worksheet
Set Data_Location = Data_Export.Sheets("Data_Location")
Dim PS_ROllOUT As Worksheet
Set PS_ROllOUT = Data_Export.Sheets("Export_Data")
Application.ScreenUpdating = False
'Step 1: Code to open up store review workbooks (set up as a loop)
Dim i As Long
For i = 2 To Application.CountA(Data_Location.Range("D:D"))
Application.StatusBar = "Current iteration: " & i - 1 & " of " & Application.CountA(Data_Location.Range("D2:D100")) & " - " & Data_Location.Range("A" & i)
Application.DisplayAlerts = False
Workbooks.Open Filename:=Data_Location.Range("D" & i).Value, ReadOnly:=False, notify:=True
Application.DisplayAlerts = True
'''Code below opens workbook and requires user to manually accept read only version
'Workbooks.Open Filename:=Data_Location.Range("D" & i)
On Error Resume Next
'Step 2: Unlocking workbook and bud table
Dim Factory_BUD As Workbook
Set Factory_BUD = ActiveWorkbook
Factory_BUD.Unprotect "bud"
Worksheets("Export_Data").Visible = True
Worksheets("Export_Data").Unprotect "bud"
Dim Export_Data As Worksheet
Set Export_Data = ThisWorkbook.Sheets("Export_Data")
'step 3 : Copy Budtable Data
PS_ROllOUT.Activate
Range("A1:AH1000").Copy
Export_Data.Activate
Worksheets("Export_Data").Select
Range("A1").Select.PasteSpecial xlPasteValues
'step4: Close and lock workbooks
Factory_BUD.Activate
Worksheets("Export_Data").Protect "bud"
Worksheets("Export_Data").Visible = False
Factory_BUD.Protect "bud"
Factory_BUD.Close SaveChanges = True
Next i
Application.ScreenUpdating = True
Application.StatusBar = False
PS_ROllOUT.Activate
MinutesElapsed = Format((Timer - StartTime) / 86400, "hh:mm:ss")
MsgBox ("Rollup Budget Updated" & vbNewLine & _
"Total run time: " & MinutesElapsed & " minutes"), vbInformation
End Sub
这是我的方法
一些建议:
- 在模块顶部使用
,这样就不会出现未定义变量的意外行为选项explicit
- 始终缩进您的代码(请参阅[www.ruberduckvba.com][1],这是一个免费的工具,可以帮助您进行缩进)
- 尝试将定义变量的逻辑与重用变量的逻辑分开
- 将变量命名为有意义且易于理解的名称(避免i或x)
- 首先用简单的英语编写代码步骤,然后用VBA进行开发(你已经有了一些东西)
- 检查代码的注释,并根据需要进行调整
让我知道它是否有效在错误恢复上注释
,下一行
用F8
键进入代码并报告。同时在模块顶部添加选项Explicit
。您的代码无法编译
Public Sub ExportDataToSP()
' Basic error handling
On Error GoTo CleanFail
' Turn off stuff
Application.ScreenUpdating = False
' Timer: to measure total macro run time
Dim startTime As Double
Dim minutesElapsed As String
startTime = Timer
' Set data export references
Dim dataExportWorkbook As Workbook
Dim dataExportSheet As Worksheet
Set dataExportWorkbook = ThisWorkbook
Set dataExportSheet = dataExportWorkbook.Worksheets("Export_Data")
' Set data location references
Dim dataLocationSheet As Worksheet
Set dataLocationSheet = dataExportWorkbook.Worksheets("Data_Location")
' Step 1: Code to open up store review workbooks (set up as a loop)
Dim fileCounter As Long
Dim totalFiles As Long
Dim fileInfo As String
Dim filePath As String
totalFiles = Application.CountA(dataLocationSheet.Range("D:D"))
For fileCounter = 2 To totalFiles
' Gather file data
fileInfo = dataLocationSheet.Range("A" & fileCounter)
filePath = dataLocationSheet.Range("D" & fileCounter)
' Set status bar message
Application.StatusBar = "Current iteration: " & fileCounter - 1 & " of " & totalFiles & " - " & fileInfo
' Open target workbook (SharePoint)
Dim targetWorkbook As Workbook
Application.DisplayAlerts = False
Set targetWorkbook = Workbooks.Open(Filename:=filePath, ReadOnly:=False, Notify:=True)
Application.DisplayAlerts = True
' Set target sheet in SharePoint workbook
Dim targetSheet As Worksheet
Set targetSheet = targetWorkbook.Worksheets("Export_Data")
' Step 2: Unlocking workbook and bud table
targetWorkbook.Unprotect "bud"
targetSheet.Visible = True
targetSheet.Unprotect "bud"
' Set data export range
Dim dataExportRange As Range
Set dataExportRange = dataExportSheet.Range("A1:AH1000")
' Step 3: Copy Bud table Data (Values)
targetSheet.Range("A1").Resize(dataExportRange.Rows.Count, dataExportRange.Columns.Count).Cells.Value = dataExportRange.Cells.Value
' Step 4: Close and lock workbooks
targetSheet.Protect "bud"
targetSheet.Visible = False
targetWorkbook.Protect "bud"
targetWorkbook.Close SaveChanges:=True
Next fileCounter
' Timer: Display elapsed time
minutesElapsed = Format((Timer - startTime) / 86400, "hh:mm:ss")
MsgBox ("Rollup Budget Updated" & vbNewLine & _
"Total run time: " & minutesElapsed & " minutes"), vbInformation
CleanExit:
Application.ScreenUpdating = True
Application.StatusBar = False
Exit Sub
CleanFail:
Debug.Print "Something went wrong: " & Err.Description
Resume CleanExit
End Sub