How to use Named Cells in XlsxWriter - xlsxwriter

The example at https://xlsxwriter.readthedocs.io/workbook.html#define_name does not appear to be valid anymore:
workbook.define_name('Exchange_rate', '=0.96')
worksheet.write('B3', '=B2*Exchange_rate')
The code appears to have been changed to define_names.append, but its unclear how to use it.
Is it just me, or is the example now out of date?
How do you read and set a named range?

Is it just me, or is the example now out of date?
The example is still valid. The code snippet is taken from this larger example and running that gives the expected output:
How do you read and set a named range?
You can set a named range, as shown in the linked example. You cannot read it with XlsxWriter.

Related

Change Heading Number copied from another document

How can I change the Heading Number with VBA code?
For example, "1.1 Computer system"
I'd like to change "1.1" to "1.2".
I can read it with:
Selection.Paragraphs(1).Range.ListFormat.ListString
I can't find a way to change it.
Basic Function Test
1.1. LED Function Test Purpose: To make sure all the LED Functions are working as the Product Specification Resource Requirements:
The context is shown above. Sometimes, I copy from another document. The pasted heading number is not correct.
I tried to record the macro but the recorded macro is empty.
To force Heading 2 to start the numbering from 1.2, all you need is:
ActiveDocument.Styles(wdStyleHeading2).ListTemplate.ListLevels(2).StartAt = 2
Your update shows you're trying to do something quite different, however.
The only reliable way to retain the original numbering when copying/pasting between documents is to either:
convert the source numbering to static text before copying; or
paste the copied content as unformatted text.

Excel VBA - Creating a Table In a Specific Non-Default(A1) Location

If you run the following code:
WorkSheet.ListObjects.add(SourceType:=xlSrcRange, Destination:=Range("A10:C13"))
One might be tempted into thinking, this would place table in the range of "A10:C13". It does not, a table is instead inserted into A1 with one column and one row(excluding the header):
This is clearly specified in the Official Documentation of this function:
The Destination argument is ignored if SourceType is set to
xlSrcRange.
How do you insert a table into any other range of cells?
You are adding your worksheet range definition into the wrong parameter.
WorkSheet.ListObjects.add SourceType:=xlSrcRange, Source:=WorkSheet.Range("A10:C13")
See ListObjects.Add Method (Excel) for a full description of the method.
Using the documentation provided from this page, I simulated what a user might do to add a table:
Range("A10:C13").Select
WorkSheet.ListObjects.add(SourceType:=xlSrcRange)
It seems adding the select statement will place the table into the correct location.

How to get defined table name in Excel?

I have an excel file with several sheets with assigned to them alliances. One of value on one sheet is calculating by using code below:
VLOOKUP(D10; lst_table_col; 4;00);
It doesn't matter that VLOOKUP function do, that matters is what exactly sheet behind lst_table_col. The problem is that this excel file doesn't contain any lst_table_col sheet. I'm looking for any solution: by just mouse, vba - whatever.
I believe my question is very easy, but this situation confuse me.
You must have a table called lst_table_col
Because if it was a direct reference to an Excel Range, you would see something like this in the formula :
SheetName!R1C1:R10C4
or
A1:D10
so check in Formula Tabs -> Name Manager to find it! ;)
Here is the link for the tutorial provided by #Rocketq : https://support.office.com/en-ca/article/Define-and-use-names-in-formulas-4d0f13ac-53b7-422e-afd2-abd7ff379c64#bmmanage_names_by_using_the_name_manage

Inconsistent recognition of ranges (No errors thrown)

This is code from Excel 2010. All of the code resides within the workbook itself. Information is gathered using internal forms and the code is run.
I have code that retrieves data from a spreadsheet and populates an object with that data. The row number is dynamic as it is dependent on the form input. The column is by the header, not the column number. The following code works perfectly but for two anomalies:
cTank.RowForTankSpecs = rNum
cTank.MP = .Cells(rNum, Range("MP").Column).Value
cTank.Form = .Cells(rNum, Range("formName").Column).Value
cTank.TankProcess = .Cells(rNum, Range("Process").Column).Value
cTank.Location = .Cells(rNum, Range("Location").Column).Value
cTank.TankName = .Cells(rNum, Range("Tanks").Column).Value
cTank.tankID = .Cells(rNum, Range("TankID").Column).Value
First:
The cTank.TankName is retrieving information from a column named "Tanks". That column does not exist. The actual column header is "Tank". But, it is retrieving the correct information. If I change the name to what it really is (Tank), it does not work.
Second:
When the cTank.TankID line is executed, I get the following error on the Range("TankID"):
Runtime Error 1004: Method 'Range' of object '_Global' failed
This one has the appropriate header (column header), but it is not recognizing the range.
I have tried simple things such as changing the order of the code, but it doesn't help. As earlier stated, the other lines work. Later in the program, information is gathered in the same manner but using another worksheet from the same workbook, and none of them are working. I've double checked that strings are strings and integers are integers, etc. I've double checked the column headers match the range names. Nothing seems to jump out at me.
I would appreciate any input you may have on the situation.
Thanks in advance.
Steve
Ok. Being pretty sure my code was correct, I went to the spreadsheet itself. For some reason it was recognizing only certain columns and it was recognizing one of them incorrectly. So I started highlighting the columns that worked and also the columns that didn't. What I noticed was that on the columns that were being recognized, that column header was displayed where the cell location is normally displayed whereas on the columns that were not being recognized, the cell location (i.e. A1, A2, etc.) for the header was being displayed and not the header title itself. The incorrect label was showing up for one of them. As it turns out, the mislabeled column was one that I had used for a form dropdown menu. So, I checked the name manager, and the ones that were working were listed. So anyway, using the name manager, I added named ranges using the headers. Now, when I select the columns, the column header(named range) appears in that window and now, the code works.
Thanks guys for your input. I really appreciate it.
Two things you can do:
Do not use use Range, but as it seems you are using names, use Names("Yourname").Referstorange.
OR
Make sure your names are set up correctly using the Name Manager in Data Ribbon.

Is it possible to name a range on a sheet that does not exist yet?

I am trying to create a named range for a worksheet that does not yet exist in the workbook. I will be using a macro to import a user-defined text file as the source.
Am I restricted to only defining these named ranges once the worksheet has been imported, or can I name a future range on a sheet that does not exist yet?
In Refers to:
=INDIRECT("NotYetASheet!$A$1")
I'm assuming the names will be created upon import of the data. I'm also assuming it's ok if your unnamed ranges return errors until the data has been imported. You can manage this using the IFERR or IFERROR functions.
Enter the following in a cell of a new worksheet:
=notyetnamed
Then select another cell, enter any old value, and give it the name notyetnamed.
I hope this answers your question. If not, you're welcome to clarify and I'll do my best to help.