Aktivieren von Excel-Makro-codes?
Arbeite ich in einem bestehenden Projekt die Basis tun, Excel-Klasse zum kopieren von Werten aus einem Arbeitsblatt Einer anderen B. Es gibt einige Formeln und Add-in-Funktionen in ws-A-Zellen. Die copy-codes verwendet werden, um zu kopieren, nur Werte, die sich zum ws B als Ergebnis. Hier ist ein block des codes vereinfacht:
using Excel = Microsoft.Office.Interop.Excel;
....
object missing = System.Type.Missing;
Excel.Application app = new Excel.Application();
//Creating Excel application with source workbook in memory
Excel.Workbook workbook = app.Workbooks.Open("SourceA.xls",
Excel.XlUpdateLinks.xlUpdateLinksNever,....);
...
app.Calculate() //Forcing to recalculate value in cells.
...
//create destination workbook
Excel.Workbook destWb = app.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
Excel.WorkSheet destSheet = (Excel.Worksheet)destWb.Worksheets[1];
Excel.Range destRange = (Excel.Range)destSheet.Cells[1, 1];
//rename sheet 1
destSheet.Name = "wsB Report";
//Set Source Data Range from
Excel.WorkSheet sourceWA = (Excel.Worksheet)workbook.Worksheets["wsA"];
//Get the predefined named range "DataRange" from source wsA
Excel.Range sourceRange = sourceWA.get_Range("DataRange", missing);
//copy data
sourceRange.Copy(missing);
//paste values and number formats
destRange.PasteSpecial(Excel.XlPasteType.xlPasteValuesAndNumberFormats,
Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, missing, missing);
//paste formats
destRange.PasteSpecial(Excel.XlPasteType.xlPasteFormats,
Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, missing, missing);
//paste column widths
destRange.PasteSpecial(Excel.XlPasteType.xlPasteColumnWidths,
Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, missing, missing);
....
destWb.SaveAs("destB.xls", missing, ....);
Das problem, das ich habe ist, dass die Kopien in Zellen destB.xls sind alle markiert als "#NAME?". Sie sollen Werte kopiert. Ich öffne die excel-Quelldatei und ich kann sehen, dass die Daten in der Quell-Bereich sind aktualisiert mit Werten. Jedoch, wenn ich meine codes, die Werte scheinen nicht verfügbar.
Ich denke, dass die Excel-Anwendung, die ich meine codes nicht habe Makro aktiviert. Dies kann ein Grund sein, Werte können nicht kopiert werden. Zum Beispiel, wenn ich öffnen Sie die excel-Quelldatei, ich werde sehen, eine Aufforderung zum aktivieren oder deaktivieren von Makros. Wenn ich auf Enable-Schaltfläche, excel wird einige Zeit dauern, um die Anzeige von Werten in Daten-Zellen.
Wenn das der Grund ist, gibt es eine Möglichkeit, in den codes zum aktivieren von Makros, so dass alle Formeln in den Zellen wird in der Lage sein, die Werte zu aktualisieren?
Ein weiterer Grund könnte verursacht werden durch OS-oder Windows-Sicherheits-updates. Nicht sicher, ob alle Windows-Sicherheits-Einstellungen beeinflussen können Excel-Makros. Wenn dies der Fall ist, sollte ich ändern, um Windows-security-Ebene oder in irgendeiner Weise zu zwingen mit Makros in mein Projekt?
Übrigens, mein Projekt läuft unter Windows XP und Windows 2008 Server, Office Excel 2003 installiert. Das Projekt wurde durchgeführt in VS 2008.
- makro zum aktivieren der Makros? 🙂
- Senken Sie die Excel-makro-Sicherheitsstufe auf Ihrem computer, aber alle, die Sie senden die Datei wird immer noch gefragt, ob Sie Makros aktivieren.
- Ich habe versucht, excel-makro-Warnungen auf den niedrigsten, aber es funktioniert immer noch nicht. Irgendwie meine codes das gleiche tun wie ich interaktiv öffnen Sie Excel. stellen Sie kopieren und speziellen paste, aber die codes nicht kopieren Werte als ich erwartet hatte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich ging weiter in meine codes, und ich fand, dass, indem Sie Excel-app sichtbar ist, würde ich in der Lage, um zu sehen, was tatsächlich passiert ist. Als Ben Voigt's Vorschlag, die Sicherheitseinstellungen für Makros kann man in Excel, aber in den codes, die Sie zwingen kann, das ausführen von VBA-codes wie egal, was die Einstellung ist. Hier sind einige codes um Excel sichtbar zu machen und sehen, all die prompt-Dialoge:
Zum Beispiel, ich Baue die links in meinem C# - codes, festlegen von Werten in Zellen und aktualisieren oder Werte berechnen(F9 simulieren). Durch das sichtbar machen von Excel, sah ich was Los war, und fand Fehler in meinen codes, die nicht tun, was ich will.