我需要將一些資料從一個 Excel 作業簿復制到另一個作業簿,但我只需要復制值和格式。除了使用 PasteSpecial() 方法外,我不知道其他任何方法。問題是,當我運行代碼時,我收到以下錯誤訊息:
System.Runtime.InteropServices.COMException: 'Microsoft Excel cannot paste the data.'
這是我目前正在使用的代碼:
Sub CopyData()
Dim xlApp As New Excel.Application
Dim xlWb As Excel.Workbook
xlApp.DisplayAlerts = False
Dim xlFileName As String
Dim OpenFile As New OpenFileDialog
If OpenFile.ShowDialog() <> DialogResult.Cancel Then
xlFileName = OpenFile.FileName
xlWb = xlApp.Workbooks.Open(xlFileName)
Else
xlApp.Quit()
Exit Sub
End If
xlApp.Visible = True
For Each xlWs As Worksheet In xlWb.Worksheets
If xlWb.Worksheets.Count > 1 Then
xlWs.Delete()
End If
Next
Dim wsActvSh As Worksheet = Globals.ThisWorkbook.ActiveSheet
For Each ws As Worksheet In Globals.ThisWorkbook.Worksheets
If ws.Visible = True And Mid(ws.Name, 5, 2) = Mid(wsActvSh.Name, 11, 2) Then
ws.Range("a:i").Copy()
xlWb.Worksheets.Add().Name = Mid(ws.Name, 5)
xlWb.ActiveSheet.Range("a1").PasteSpecial(XlPasteType.xlPasteValues)
End If
Next
End Sub
我試過這樣做:
For Each ws As Worksheet In Globals.ThisWorkbook.Worksheets
If ws.Visible = True And Mid(ws.Name, 5, 2) = Mid(wsActvSh.Name, 11, 2) Then
xlWb.Worksheets.Add().Name = Mid(ws.Name, 5)
xlWb.ActiveSheet.Range("a:i").Value = ws.Range("a:i").Value
End If
Next
但這對我不起作用,因為即使最后一個代碼確實將值復制到新作業表上,我仍然缺少格式。
uj5u.com熱心網友回復:
今天我解決了這個問題。問題不在于 PasteSpecial 方法本身,而是我試圖通過 OpenFileDialog 將范圍粘貼到預先存在的作業簿中。
我不知道為什么會發生這種情況,因為在 VBA 中我使用類似的代碼打開預先存在的作業簿并且根本沒有任何問題。雖然現在我想起來了,但在 VBA 中我并沒有使用檔案對話框來打開作業簿。Insted 我正在使用 Worbooks.Open() 這會導致一些問題,因為用戶會將我試圖打開的檔案移動到 PC 中的不同位置。
無論如何,我現在正在創建一個新的 Excel 檔案并將資料粘貼到那里,如下所示:
Sub CopyData()
Dim xlApp As New Excel.Application
Dim xlWb As Excel.Workbook
Dim wsActvSh As Worksheet = Globals.ThisWorkbook.ActiveSheet
Dim strLiquidacion As String = Globals.shTbClientes.Range("b:b").Find(Mid(wsActvSh.Name, 1, 3)).Offset(0, 1).Value
Dim xlWbActSh As Worksheet
xlApp.DisplayAlerts = False
xlWb = xlApp.Workbooks.Add()
xlApp.Visible = True
For Each ws As Worksheet In Globals.ThisWorkbook.Worksheets
If ws.Visible = True And Mid(ws.Name, 5, 2) = Mid(wsActvSh.Name, 11, 2) Then
ws.Range("a:i").Copy()
xlWb.Worksheets.Add().Name = Mid(ws.Name, 5)
xlWbActSh = xlWb.ActiveSheet
xlWbActSh.Range("a:i").PasteSpecial(XlPasteType.xlPasteValues)
xlWbActSh.Range("a:i").PasteSpecial(XlPasteType.xlPasteFormats)
End If
Next
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/530213.html
上一篇:查找和檢索每個DataGrid行的值以在其中添加和填充第二列(來自SQL)
下一篇:設定文本框滾動條的準確位置
