簡體   English   中英

將多個范圍粘貼到VBA中的另一個工作表

[英]Pasting multiple ranges to another sheet in vba

我希望代碼將“ cashb”粘貼到“ rngcel”下方,但是每次運行代碼時,“ cashb”的值都會出現在“ rngCel” .value上方。 Rngcell的范圍是A2:A34,我希望“ Cashb”出現在A35的正下方。 我嘗試將“ A35”放入范圍內,但不起作用。

這是我想顯示在rngcel.value下面的代碼。

Sheets(" Price").Range("A35").Resize(Cashb.Rows.Count).Value = Cashb.Value

我也想返回“ cashb”范圍右側5列的列,我感謝收到的任何幫助。

這是我所擁有的代碼。

    Sub liveP()

   Application.ScreenUpdating = False

    Dim rngTicker As Range
    Dim rngCel As Range
    Dim Cashb As Range
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets.Add(After:= _
             ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
             ws.Name = "Live"
    Set rngTicker = Worksheets("prices").Range("H16:H200") 
    Set Cashb = Sheets("prices").Range("cashbalances")


    For Each rngCel In rngTicker

        If rngCel.Font.ColorIndex = 33 Then
         Worksheets("Live").Cells(Rows.Count, 1).End(xlUp).offset(1).Resize(1, 2).Value = Array(rngCel.offset(, "-7").Value, rngCel.Value) ' this is range cell value'
         WorkSheets("Live").Range("A35").Resize(Cashb.Rows.Count).Value = Cashb.Value.offset ' this is the value I'd like to appear under rngcel value

            'New data that im posting on the Live sheet'
              Sheets("Live").Range("C2:H33").Formula = "=($B2 +$C5)"
              Sheets("Live").Range("A1") = "Header1"
              Sheets("Live").Range("B1") = "Header2"
              Sheets("Live").Range("C1") = "Header3"
              Sheets("Live").Range("D1") = "Header4"
              Sheets("Live").Range("E1") = "Header5"
              Sheets("Live").Range("F1") = "Header6"

        End If


    Next


  Application.ScreenUpdating = True

End Sub

嘗試這個

Sub liveP()

Application.ScreenUpdating = False

Dim rngTicker As Range
Dim rngCel As Variant 'used in for each this should be variant
Dim Cashb As Range
Dim ws As Worksheet
Dim LastRow As Long 'dimensioned variable for the last row
Dim CashbRows As Long 'dimensioned variable for Cashb rows
Set ws = ThisWorkbook.Sheets.Add(After:= _
         ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
         ws.Name = "Live"
Set rngTicker = Worksheets("prices").Range("H16:H200")
Set Cashb = Sheets("prices").Range("cashbalances")
'Assuming "cashbalances" is a named range in the worksheet

CashbRows = Cashb.Rows.Count

For Each rngCel In rngTicker

    If rngCel.Font.ColorIndex = 33 Then
     With Worksheets("Live")
        LastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 'set lastrow variable
        .Cells(LastRow, 1) = rngCel.Offset(0, -7).Value 'putting value 7 columns before into live worksheet column A
        .Cells(LastRow, 2) = rngCel.Value 'putting value into live worksheet column B
        .Range(.Cells(35, 1), .Cells(35 + CashbRows, 1)) = Cashb.Offset(, 5).Value 'im not really sure if this line is going to work at all

        'New data that im posting on the Live sheet'
          .Range("C2:H33").Formula = "=($B2 +$C5)"
          .Range("A1") = "Header1"
          .Range("B1") = "Header2"
          .Range("C1") = "Header3"
          .Range("D1") = "Header4"
          .Range("E1") = "Header5"
          .Range("F1") = "Header6"
     End With

    End If

Next

Application.ScreenUpdating = True

End Sub

修改內容:

rngCel現在是變體而不是范圍

使用LastRow變量擺脫偏移量

將數據放入“ LIVE”時刪除了數組,原因為何

現在,CashbRows將僅在循環之前計算一次。 節約時間

With Worksheets("Live")語句是一種節省時間的措施。

您將A35稱為范圍,但不是,然后將其調整為范圍? 當我不能說出什么是“現金余額”時,很難知道。 如果“現金余額只有1行或曾經是1行,那么您將需要添加If Then Else控件來處理它。

同樣,A35在每個循環中都會被覆蓋...因此不確定在此要做什么。

我希望我能夠很好地理解您的問題,以使您朝正確的方向前進。

編輯

不再將“現金余額”視為命名范圍。 我相信VBA會掛在該范圍的原始行號上,類似於以下所述分配變量數組時從1開始的方式。 看起來您沒有在修改“現金余額”,因此在循環之前但在CashbRows之后創建一個變量數組。

例:

Dim CB() as variant, j as long
with sheets("PUT THE SHEET NAME OR INDEX HERE")
CB = .range(.cells(1,6), .cells(CashbRows,6)).value 'address to whatever .offset(,5) is
'i assumed cashb was in column A 

代替.Range(.Cells(35, 1), .Cells(35 + CashbRows, 1)) = Cashb.Offset(, 5).Value使用:

For j = 1 to CashbRows
    .cells(34 + j, 1) = CB(j)
Next j

暫無
暫無

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

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