2016-04-22 9 views
1

これは私の最初の投稿ですので、事前に助けてください。どのような素晴らしいコミュニティ!マクロは値のリストからループをコピーするまで、単一セルに貼り付けます(例:b1)

貼り付けられたばかりの値をループで置き換えるたびに、未定義の行数と1つずつの値のリストをループして1つのセルに値をコピーして貼り付けるマクロを作成しようとしていますだろう

__|__A__|__B__ 
1 | 231 | 234 
2 | 232 | 
3 | 233 | 
4 | 234 | 
5 | 235 | 
6 | 236 | 

231:数ここで

のIDに基づいて、レポートテンプレートと自動を移入データによって参照されている単一のセルの中にテーブルがどのように見えるかの例です。 B1にコピー&ペーストされると、232がコピーされてB1に貼り付けられ、233がコピーされてB1に貼り付けられ、234がb eをコピーしてB1に貼り付けるなどのように。コピーと過去のステップの間に、ワークシートにイメージを追加してpdfとして保存するための他のステップがあります。

私は目標を達成するために、このスクリプトを書いた:

Sub Report() 
' 
' Report Macro 
' 
' Keyboard Shortcut: Ctrl+Shift+G 
' 
' this section just copies a selection of cells from on worksheet and moves it to another worksheet filters it and copies filtered list to yet another worksheet. 
Application.ScreenUpdating = False 
Selection.Copy 
Sheets("Master Sheet").Select 
Range("A6").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
:=False, Transpose:=False 
ActiveSheet.Range("$A$5:$BS$410").AutoFilter Field:=7, Criteria1:="2" 
Selection.Copy 
Sheets("Report").Select 
Range("A1").Select 
ActiveSheet.Paste 
' This section does the operation outlined at beginning of post. 
Range("A1").Select 
Do Until IsEmpty(ActiveCell.Value) 
    Selection.Copy 
    Range("B1").Select 
    ActiveSheet.Paste 
    Application.Run "PERSONAL.XLSB!ErasePhoto" 
    Application.Run "PERSONAL.XLSB!PhotoPlace" 
    ActiveWindow.ScrollRow = 1 
    Application.CutCopyMode = False 
    ChDir "C:" 
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Range("B3").Value   _ 
    , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ 
    :=False, OpenAfterPublish:=True 
    Application.Run "PERSONAL.XLSB!ErasePhoto" 
    ActiveCell.Offset(1, 0).Select 
Loop 
End Sub 

私はそれが一度に成功を通過するマクロを実行ではなく、ループを実行したとき。なぜわからないのですか?ありがとう!!!!

+0

フォーマットを修正するためのDirkに感謝します。私はこれを初めて知ったので、私が得ることができるすべての助けに感謝します。 –

答えて

0

ループ実行時にどのセルがアクティブセルであるかを確認する手順はありますか?コードはB1を各ループのアクティブセルとして設定します。呼び出されたプロシージャが何をしているのかわからなければ、Loopの前にどのセルがActiveCell.Offset(1, 0).Selectの影響を受けるかを知るのは難しいです。

コードには、不要なselect文とactivate文がたくさんあります。それをきれいにする。

0

OKだから、skywriterという素晴らしい人からExcelのフォーラムで回答を見つけることができました。それは魅力のように働いた。

Dim r As Range 
For Each r In Range("A1", Range("A" & Rows.Count).End(xlUp)) 
    Range("B1").Value = r.Value 
    Application.Run "PERSONAL.XLSB!ErasePhoto" 
    Application.Run "PERSONAL.XLSB!PhotoPlace" 
    ActiveWindow.ScrollRow = 1 
    Application.CutCopyMode = False 
    ChDir "C:" 
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF,  Filename:=Range("B3").Value _ 
    , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ 
    :=False, OpenAfterPublish:=True 
    Application.Run "PERSONAL.XLSB!ErasePhoto" 
Next r 
0

私はその後Do Untilループ内で使用されているcounter変数を追加することで、あなたのコード内の軽微な変更を加えました。これにより、Offsetを使用して目的のセルを選択できます。

' This section does the operation outlined at beginning of post. 
Range("A1").Select 
Dim counter As Long '---->line added 
counter = 1   '---->line added 
Do Until IsEmpty(ActiveCell.Value) 
    Selection.Copy 
    Range("B1").Select 
    ActiveSheet.Paste 
    Application.Run "PERSONAL.XLSB!ErasePhoto" 
    Application.Run "PERSONAL.XLSB!PhotoPlace" 
    ActiveWindow.ScrollRow = 1 
    Application.CutCopyMode = False 
    ChDir "C:" 
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Range("B3").Value _ 
    , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ 
    :=False, OpenAfterPublish:=True 
    Application.Run "PERSONAL.XLSB!ErasePhoto" 
    ActiveCell.Offset(counter, -1).Select '----> make change here 
    counter = counter + 1     '----> line added 
Loop 
関連する問題