标签: excel-2007

如何正确有效地使用WorkbookBeforeClose事件?

每天,一个人需要检查特定工作簿是否已经使用彭博和路透社的市场数据进行了正确更新; 即所有数据都已通过并且"数字看起来正确".在过去,人们没有检查导致上传到其他系统的"数字"不正确.

我们的想法是,需要开发"某些东西"以防止使用关闭/保存工作簿,除非他/她已检查更新是否正确/准确.该numbers look correct动作纯粹是一种直观的练习,因此不会以任何方式编码.

简单的解决方案是在关闭特定工作簿之前提示用户验证数据是否已被检查.

使用VSTO SE for Excel 2007,创建了一个加载项,该加载项挂接到WorkbookBeforeClose在加载项中初始化的事件ThisAddIn_Startup

private void wb_BeforeClose(Xl.Workbook wb, ref bool cancel)
{
    //.... snip ...

    if (list.Contains(wb.Name))
    {
        DailogResult result = MessageBox.Show("some message", "sometitle", MessageBoxButtons.YesNo);

        if (result != DialogResult.Yes)
        {
            cancel = true; // i think this prevents the whole application from closing
        } 
    } 
}
Run Code Online (Sandbox Code Playgroud)

我发现以下ThisApplication.WorkbookBeforeSavevsThisWorkbook.Application.WorkbookBeforeSave建议人们应该使用ThisApplication.WorkbookBeforeClose我认为正在做的事件,因为它将跨越所有打开的文件.

我对该方法的问题是假设我打开了几个文件,其中一些文件在我的文件中list,该事件阻止Excel按顺序关闭所有文件.现在需要单独关闭每个文件.编辑:从文件菜单中使用退出Excel时会发生这种情况.

问题

  1. WorkbookBeforeClose是否正确使用了该活动,是否有效且高效地使用了该活动?
  2. 我应该使用应用程序级事件还是文档级事件
  3. 上述行为是否正常 …

c# excel vsto excel-2007

7
推荐指数
1
解决办法
4959
查看次数

如何从Excel 2007中的VBA访问Checkbox

添加复选框时,如何从VBA访问该值?

  • 在Excel 2007中,在Developer Ribbon上
  • 插入,表单控件,复选框
  • 将Checkbox重命名为chkMyCheck
  • 将Macro添加到复选框,我现在有了带有chkMyCheck_Clicked的Module1

以下所有都失败了

Sheets("Sheet1").chkMyCheck.Checked  
Sheets("Sheet1").chkMyCheck.Value  
Sheets("Sheet1").Shapes("chkMyCheck").Checked  
Sheets("Sheet1").Shapes("chkMyCheck").Value  
Sheet1.chkMyCheck.Checked  
Sheet1.chkMyCheck.Value  
Run Code Online (Sandbox Code Playgroud)

Sheet1.Shapes("chkMyCheck")似乎找到了对象,但没有公开任何看起来可能返回已检查状态的属性.

excel vba excel-2007

7
推荐指数
1
解决办法
4万
查看次数

Excel 2007 - 根据文本生成唯一ID?

我有一张工作表,其中包含B列中的名称列表和A中的ID列.我想知道是否有某种公式可以获取该行B列中的值并根据文本生成某种ID ?每个名称也是唯一的,不会以任何方式重复.

如果我不必真的使用VBA,那将是最好的.但如果我必须,那就这样吧.

excel excel-2007 uniqueidentifier

7
推荐指数
1
解决办法
4万
查看次数

Excel工作簿从插件中打开事件?

我试图在打开Excel文档时触发一个宏来运行.

我遇到的问题是我的所有代码都驻留在Excel加载项中.Workbook_Open事件不起作用,因为我无法将代码放在单个文档中,我需要它驻留在加载项中并在打开任何文档时运行.

有没有办法修改Workbook_Open事件,还是有另一种方法可以在打开不同的文档时触发宏?

excel events vba excel-2007 excel-vba

7
推荐指数
1
解决办法
7374
查看次数

Excel 2007带有2个条件的条件格式,一个基于另一个列

我在Excel 2007中使用了一个表.我试图在一个列中基于其值和状态(在另一列中)以一种格式突出显示单元格.

例如,我试图突出显示所有单元格(仅单元格而不是行),其总利润为负数且状态为"IN".这样做的正确方法是什么?我试过if语句,但没有太大的成功.而且我不确定如何对细胞应用两种条件.我需要选择单元格的列数或范围吗?或者我是否必须选择第一个单元格并复制格式?

谢谢,



例:

Item # Status Gross Profit 1 IN $24.00 2 OUT $(34.00) 3 OUT $12.00 4 IN $18.00 5 IN $(9.00) 6 IN $(40.00) 7 OUT $32.00 8 OUT $45.00 9 OUT $23.00 10 IN $43.00 11 OUT $(18.00) 12 IN $7.00 13 IN $(25.00)

Average $6.00

excel vba excel-2007 excel-vba

7
推荐指数
1
解决办法
8万
查看次数

Excel ExportAsFixedFormat PDF

我可以成功获取excel文件并将其作为PDF文件导出到c#中

private static void ExportWorkbookToPDF(string workbook, string output)
{
    if (string.IsNullOrEmpty(workbook) || string.IsNullOrEmpty(output))
    {
        throw new NullReferenceException("Cannot create PDF copy " +
            "from empty workbook.");
    }

    Application excelApplication = new Application();
    excelApplication.ScreenUpdating = false;
    excelApplication.DisplayAlerts = false;
    excelApplication.Visible = false;

    Workbook excelWorkbook = excelApplication.Workbooks.Open(
        Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + 
        "\\" + workbook);

    if (excelWorkbook == null)
    {
        excelApplication.Quit();
        excelApplication = null;
        excelWorkbook = null;

        throw new NullReferenceException("Cannot create new excel workbook.");
    }

    try
    {
        excelWorkbook.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, 
            Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + 
            "\\" + output);
    }
    catch (Exception …
Run Code Online (Sandbox Code Playgroud)

c# excel-2007

7
推荐指数
1
解决办法
2万
查看次数

如何在同一图表上绘制2种图表使用EPPlus

我想在EPPlus中的一个图表上绘制2个不同类型的系列(即列和线)(COM帮助导出Excel文件).任何人都知道如何做到这一点.提前致谢.

c# excel-2007 epplus

7
推荐指数
1
解决办法
4582
查看次数

Excel 2007号码没有小数但没有自动舍入?

我似乎对Excel有一个相当简单的问题,虽然除了包含一个函数之外我找不到它的解决方案.

基本上我想在两个领域显示价格,一个是美元,一个是美分.

我有这个工作正常,但我有的问题是,当我在美元字段中说"24990.55"时,它将以美元显示"24991",在美分字段显示"55".

有什么办法可以强制Excel 自动循环吗?

excel excel-2007 excel-formula

7
推荐指数
2
解决办法
5万
查看次数

如何优化打开和关闭excel工作簿以提取数据以更快地运行

我目前知道两种打开和关闭 Excel 工作簿的方法,以从中提取数据以汇总在一个工作簿中。

第一种方法如下:

Dim wbDataSheet As Workbook
For FNum = LBound(MyFiles) To UBound(MyFiles)
    Set wbDataSheet = Workbooks.Open(MyPath & MyFiles(FNum), 0, True)

     'Capture data

    wbDataSheet.Close (False)
Next FNum
Run Code Online (Sandbox Code Playgroud)

第二个是这样的:

Dim XL As New Excel.Application
For FNum = LBound(MyFiles) To UBound(MyFiles)
    With XL
        .Workbooks.Open FileName:=MyPath & MyFiles(FNum), ReadOnly:=True
        .Visible = False
    End With

    'Capture Data

    XL.ActiveWorkbook.Close False
Next FNum
Run Code Online (Sandbox Code Playgroud)

我的困境是这样的:

方法 1 更快(对于 1052 个文件,大约 0.35 秒/文件)但它在打开新工作簿时会爆炸我的任务栏(使得几乎不可能选择不同的 excel 工作簿)并且由于某种原因,我的代码可以通过按轻松破解多次移动或完全按住它,迫使我重新开始编写代码。

方法 2 明显较慢(对于 1052 个文件,每个文件大约需要 0.56 秒),但由于隐藏了 excel 应用程序,我的任务栏仍然可用,按 shift 不会破坏代码。

我想知道的是,有没有办法在不破坏任务栏或让 …

excel performance vba excel-2007

7
推荐指数
1
解决办法
1万
查看次数

在VBA电子邮件中添加新行

我正在尝试通过Excel自动发送电子邮件,但新行命令无效!我试过了<br/>, vbCrLf而且vbNewLine

.HTMLbody = "Hello" & vbNewLine & "Please find attached the above invoices and backup" & vbNewLine & _
            "Any queries please let me know" & vbNewLine & "Regards" & vbNewLine & Signature
Run Code Online (Sandbox Code Playgroud)

它只是Hello Please find attached the above invoices and backup Any queries please let me know Regards作为一条线给予!

excel vba excel-2007 excel-vba html-email

7
推荐指数
2
解决办法
8万
查看次数