- ベストアンサー
オフィス2003VBAでユーザーフォームのデータを別のシートにコピーする方法とは?
- ユーザーフォームのデータを他のシートにコピーするためには、オフィス2003のVBAを使用する方法があります。
- 具体的なコードの例として、ユーザーフォームで入力されたデータを特定の範囲にコピーする方法を示します。
- ただし、クリップボードを経由せずに直接コピーする方法については、詳細な情報が必要です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 無理じゃないかな。SpreadSheet って Office Web Compornents の OCX コントロールですよね? コントロールの追加で言えば、 Microsoft SpreadSheet x.x (x はバージョンを示す) のこと? これは同じ Microsoft 製品だとしても Excel.exe とは別物ですから、 同じようなプロパティー、メソッドを備えているとしてもごちゃ混ぜには できません。 実際に試して、Copy メソッドの名前付き引数 Destination に Excel.exe 配下の Range を指定できないのなら、そういうもの(仕様)なのでしょう。 > できればクリップボードの経由なしでコピーをしたいです。 なぜ? クリップボード経由なら簡単にできますよね? クリップボードで何か特殊なことを同時に行うため干渉されたくない、、 などの事情がない限り、拘る意味がない気がします。 ' // クリップボードを使って転記する例(一部書式もコピーされる) Private Sub CommandButton1_Click() Spreadsheet1.Worksheets("Sheet1").Range("A1:C2").Copy Worksheets("Sheet1").Range("A1").PasteSpecial End Sub 一応、Variant 型配列を使うという手もありますけど、値のみのコピーに なりますし、オンメモリという点ではクリップボード経由と差がありません。 ' // 配列を使って値を転記する例 Private Sub CommandButton1_Click() Dim v As Variant v = Spreadsheet1.Worksheets("Sheet1").Range("A1:C2").Value Worksheets("Sheet1").Range("A1").Resize(UBound(v), UBound(v, 2)).Value = v End Sub それから余談になりますが、、 > Spreadsheet1.Range(Cells(V1_row + 1, V1_col), ...以下略 ではダメですよ。コピー元として SpreadSheet1 配下の Range を指定したい のであれば、 ・Worksheet の指定が必要 ・Range 内 の Cells にも親オブジェクトの装飾が必要 です。例えばこんな感じ。 With Spreadsheet1.Worksheets("Sheet1") .Range(.Cells(V1_row + 1, V1_col), .Cells(V1_row + 2880, V1_col)).Copy End With のように。装飾を省略すると Excel.exe の ActiveSheet が自動補完されてしまい ますから、SpreadSheet 配下のモノなのか、Excel 配下のモノなのかに留意 して下さい。
お礼
回答ありがとうございます! スプレッドシートにはRangeプロパティがないんですねぇ。 エラーの原因がわかりました。 視覚障害者なので、音声ソフトを入れているのですが、 クリップボードの中身をひたすら読むので耳にタコができそうになります。 スプレッドシートのデータを配列に格納して、 エクセルシートにはきだしてみたのですが、 データが重くてものすごく時間がかかります。 もうちょっとよい方法を考えてみます。
補足
あれこれためしてみたのですが、データを貼り付けたいブックにシートを挿入して、データ移動をするのが一番早いようです。 ありがとうございました。