簡體   English   中英

將數據從一個工作簿復制並粘貼到另一個導致隨機單元格獲取數據/空行未獲取粘貼數據

[英]Copying and Pasting data from one workbook to another resulting in random cells getting data/empty rows not getting pasted data

更新

我的問題現在已經解決了一半,但我仍然遇到問題。 我粘貼到新工作簿的大部分數據工作正常。 如果您多次按下按鈕,數據將粘貼到下一個可用行。 但是,特別是三行不起作用。 第一次按下宏按鈕時,數據將粘貼在正確的位置,但隨后數據將粘貼到適當行下方 31 行。 我對此完全困惑。 工作表該部分中的單元格是否存在某種格式問題? 任何幫助,將不勝感激。

原問題

讓我解釋一下這是怎么回事。 我試圖這樣做,一旦在一個工作簿中填寫了一個表單,用戶按下一個按鈕,該表單中的數據就會被復制並粘貼到另一個工作簿中,該工作簿就像所有數據的主文件。 表單中的數據應該粘貼在第二個工作簿的特定列中。

到目前為止,我已經成功地創建了實現這一目標的粗略但有效的代碼,但現在我遇到了一些問題。 當我按下第一個工作簿上的按鈕時,所有內容都會按預期粘貼,但單元格(特別是 G163)將粘貼數據。 我檢查過,代碼中沒有任何內容專門將宏粘貼到該單元格。 此外,如果我第二次按下按鈕,某些單元格將不會粘貼到下一個可用的空單元格中,而是會被推下列並粘貼到與預期不同的單元格中。

我對 excel vba 很陌生,所以任何幫助將不勝感激。 我將在下面發布我的代碼以及一些奇怪粘貼的圖片。

Sub Button1099_Click()

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("A42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("A4").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("A42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("A4").Copy
Range("A" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("A" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("B42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("P2").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("B42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("P2").Copy
Range("B" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("B" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("C42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("P3").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("C42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("P3").Copy
Range("C" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("C" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("D42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("C10").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("D42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("C10").Copy
Range("D" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("D" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("E42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("C9").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("E42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("C9").Copy
Range("E" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("E" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("F42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("C11").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("F42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("C11").Copy
Range("F" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("F" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("G42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("B17").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("G42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("B17").Copy
Range("G" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("G" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("H42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("C12").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("H42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("C12").Copy
Range("H" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("H" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("I42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("J10").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("I42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("J10").Copy
Range("I" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("I" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("J42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("J11").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("J42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("J11").Copy
Range("J" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("J" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

 Application.CutCopyMode = False
 Workbooks("2018Monthly.xls").Save

End Sub

這是您單擊一次按鈕后第二個工作簿的樣子:

一鍵按下后粘貼的工作簿

一鍵按下后粘貼的工作簿

如果您再次按下按鈕,工作簿將是這樣的:

按兩次按鈕后粘貼的工作簿

按兩次按鈕后粘貼的工作簿

由於您正在將單元格復制到單元格,請嘗試此操作;

Dim ws1 As Worksheet
Dim ws2 As Worksheet

Set ws1 = Workbooks("Formtest.xlsm").Worksheets("Form")
Set ws2 = Workbooks("2018Monthly.xls").Worksheets("7")

Dim lRow As Long
lRow = ws2.Range("A" & Rows.Count).End(xlUp).Row

If ws2.Range("A42").Value = "" Then
    ws2.Range("A42").Value = ws1.Range("A4").Value
Else: ws2.Range("A" & lRow).Offset(1).Value = ws1.Range("A4").Value
End If

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM