如何使用VBA保存Excel加载项

时间:2018-05-15 11:25:30

标签: excel vba excel-vba office-addins excel-addins

我有一个Excel加载项,它在其工作簿中使用工作表来保存一些首选项数据(例如,用户表单上的refEdit控件的最后一个使用值)。

然后在用户表单中更改首选项时,使用vba <?php $host = 'db_host'; $db = 'db_name'; $user = 'db_user'; $pass = 'db_password'; $con = mysqli_connect($host, $user, $pass) or trigger_error(mysql_error(),E_USER_ERROR); $con->set_charset("utf8"); mysqli_select_db($con,$db); $params = $columns = $totalRecords = $data = array(); $params = $_REQUEST; $columns = array( 0 => 'id', 1 => 'register', 2 => 'name', 3 => 'level' ); $where_condition = $sqlTot = $sqlRec = ""; if( !empty($params['search']['value']) ) { $where_condition .= " WHERE "; $where_condition .= " ( name LIKE '%".$params['search']['value']."%' "; $where_condition .= " OR register LIKE '%".$params['search']['value']."%' )"; } $sql_query = "SELECT id,date_format(register, '%d/%m/%Y') as register,name,level FROM customers"; $sqlTot .= $sql_query; $sqlRec .= $sql_query; if(isset($where_condition) && $where_condition != '') { $sqlTot .= $where_condition; $sqlRec .= $where_condition; } $sqlRec .= " ORDER BY ". $columns[$params['order'][0]['column']]." ".$params['order'][0]['dir']." LIMIT ".$params['start']." ,".$params['length']." "; $queryTot = mysqli_query($con, $sqlTot) or die("Database Error:". mysqli_error($con)); $totalRecords = mysqli_num_rows($queryTot); $queryRecords = mysqli_query($con, $sqlRec) or die("Error to Get the Post details."); while( $row = mysqli_fetch_row($queryRecords) ) { $data[] = $row; } $json_data = array( "draw" => intval( $params['draw'] ), "recordsTotal" => intval( $totalRecords ), "recordsFiltered" => intval($totalRecords), "data" => $data ); echo json_encode($json_data); ?> 保存加载项工作簿。

我发现这有时会在myDocuments中创建一个xlsm文件,而不是保存加载项(另请参阅a copy of excel add-in is created in my documents after saving)。

如何在不创建副本的情况下将加载项保存在加载项文件夹中?注意thisworkbook.save不起作用,因为它保存打开的工作簿而不是加载项。

我也可以为首选项创建一个临时文件,但使用外接程序工作簿中的工作表似乎是存储数据的好地方。

2 个答案:

答案 0 :(得分:0)

据我所知,您无法将文件另存为加载项并使用该文件中的工作表。
加载项文件是仅VBA文件。

您说要保存工作表上的设置。那么使用注册表呢?

将数据保存到注册表非常简单(实际上我认为比单元格更容易)。

要保存设置:

SaveSetting "MyAddIn", "Settings", "Username", "BOB"

上面的行在窗口的注册表中创建一个值为&#34; BOB&#34;  as&#34;用户名&#34;。

要从您使用的注册表中获取设置:

Username = GetSetting("MyAddIn", "Settings", "Username")

您可以阅读方法here

将其保存在与工作表相对的注册表上的好处是,您无法删除或操纵数据。

答案 1 :(得分:0)

我找到了答案:用户打开了两份Excel副本(2016年和2010年)。这导致加载项文件被Excel的两个打开副本之一锁定,这意味着第二个副本以只读方式打开加载项,无法保存更改。

一种罕见的虫子,我没有预见到。我将重写以将首选项保存到%appdata%文件中。

我建议人们避免将thisworkbook.save与插件一起使用。

感谢大家的帮助。